package cn.lingyangwl.agile.food.model.entity;

import cn.lingyangwl.agile.model.BasePlusPO;
import cn.lingyangwl.agile.tenant.core.DataIsolation;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.Getter;
import lombok.Setter;

import java.math.BigDecimal;

/**
 * 商品
 *
 * @author shenguangyang
 */
@Getter
@Setter
@TableName(value = "food_goods", autoResultMap = true)
@DataIsolation(filterMainTenant = true, tableName = "food_goods")
public class Goods extends BasePlusPO {
    @TableId
	private Long id;
	
	/**
	 * 产品分类名称
	 */
	private Long categoryId;
	
	/**
	 * 商品名称
	 */
	private String name;

	/**
	 * 商品图片, 多个图片之前使用逗号隔开
	 */
	private String images;
	
	/**
	 * 商品描述
	 */
	private String detailContent;
	
	/**
	 * 推荐状态, 1: 推荐, 0: 不推荐
	 */
	private String recommandStatus;
	
	/**
	 * 商品编号
	 */
	private String goodsNo;
	
	/**
	 * 库存预警值
	 */
	private Integer stockAlarm;
	
	/**
	 * 单位
	 */
	private String unit;
	
	/**
	 * 商品重量，默认为克
	 */
	private BigDecimal weight;
	
	/**
	 * 新品状态 0: 不是新品；1: 新品
	 */
	private String newStatus;

	/**
	 * 排序
	 */
	private Integer sortNo;
	
	/**
	 * 价格 (多规格以 {@link GoodsSku#getPrice()} ) 为准, 单规格一直
	 */
	private BigDecimal price;

	/**
	 * 成本价格 (多规格以 {@link GoodsSku#getCostPrice()} ) 为准, 单规格一直
	 */
	private BigDecimal costPrice;

	/**
	 * 包装费用
	 */
	private BigDecimal bagPrice;
	
	/**
	 * 删除状态, 0: 未删除；1: 已删除
	 */
	private Boolean deleteStatus;

	/**
	 * 状态, 1: 已上架, 2: 未上架
	 * @see Status
	 */
	private String status = Status.NO_LISTED;

	/**
	 * 最低购买数量
	 */
	private Integer minBuy;

	/**
	 * 商品类型, 多个之间用逗号隔开,0外卖, 1店内
	 */
	private String goodsTypes;

	/**
	 * 是否为多规格
	 */
	private Boolean multiSpec;

	/**
	 * 上架的租户ids
	 */
	private String tenantIds;

	/**
	 * 划线价格: 划线价会以划线形式在商品售价旁显示
	 */
	private BigDecimal linePrice;

	/**
	 * 是否发布, 针对门店
	 */
	@TableField(exist = false)
	private Boolean isPublish;

	/**
	 * 销量
	 */
	@TableField(exist = false)
	private Integer saleNumber;


	public static LambdaQueryWrapper<Goods> lqw() {
		return Wrappers.lambdaQuery();
	}

	public static LambdaUpdateWrapper<Goods> luw() {
		return Wrappers.lambdaUpdate();
	}

	public interface Status {
		String LISTED = "1";
		String NO_LISTED = "2";
	}
}
